package com.java.util;

public class StringTest {
    public static void main(String[] args) {

        // 假设用户输入 "admin"
        String userInput = "admin";
        // 放入常量池
        String interned = userInput.intern();

        // 后续代码可能意外引用到用户的输入
        String hardcoded = "admin";
        // true（可能引发安全问题）
        System.out.println(hardcoded == interned); // true // interned 和 hardcoded 都是常量池中的字符串，引用相同

        // 使用 new String() 创建隔离副本
        String safeInput = new String(userInput);  // 不共享常量池
        System.out.println("admin" == safeInput);   // false 一个是常量池中的字符串，一个是堆中的字符串对象，肯定不相同，用equals比内容是相同的
        System.out.println("admin" == safeInput.intern());   // true // intern() 方法会将字符串放入常量池中，并返回常量池中的引用，所以比较的是同一个对象
        System.out.println("admin" == hardcoded);   // true // hardcoded 是常量池中的字符串，和 interned 相同
    }

}
